home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Alles Voor Internet / Tout Pour Internet
/
alles voor internet.iso
/
MacInternet™
/
Telnet
/
Comet.3.0.7 Folder
/
ibm-host-software
/
FTCMS.ASSEMBLE
< prev
next >
Wrap
Text File
|
1992-09-09
|
32KB
|
395 lines
FTCMS TITLE 'PARAMETER PARSING AND FILE SYSTEM INTERFACE FOR FT3270.' 00010000
********************************************************************* 00020000
* * 00030000
* THIS MODULE IS CALLED BY FT3270 TO PROCESS THE COMMAND LINE * 00040000
* ARGUMENTS. THE ADDRESS OF A DSECT IS PASSED IN R11. * 00050000
* THE HIGH ORDER BYTE OF R1 IS EXAMINED TO DETERMINE WHETHER * 00060000
* NOT TO USE THE EXTENDED PLIST POINTER IN R0. * 00070000
* THIS MODULE IS ALSO CALLED TO PERFORM FSREADS, FSWRITES, * 00080000
* AND FSCLOSE. INFORMATION IS PASSED IN THE REGISTERS. SEE FTFS. * 00090000
* * 00100000
* 1ST ARG IS LOCAL FILESPEC AND MAY BE MULTIPLE TOKENS IF IT * 00110000
* IS ENCLOSED IN DOUBLE QUOTES. * 00120000
* 2ND ARG IS CONTROL BYTE (SEE INIT2). * 00130000
* 3RD, 4TH, & 5TH ARGS ARE CMS FILENAME, FILETYPE, & FILEMODE. * 00140000
* * 00150000
* * 00160000
* FTERR IS CALLED TO PRINT ANY ERROR MESSAGE. * 00170000
* * 00180000
* PETER HOYT CORNELL COMPUTER SERVICES * 00190000
* VERSION 2.0 AUGUST 30, 1987 * 00200000
* * 00210000
* SOURCE FILE SEQUENCED FOR FUTURE MAINTANENCE. LARRY CHACE * 00220000
* * 00230000
********************************************************************* 00240000
* 00250000
FTCMS CSECT 00260000
EXTRN FTERR 00270000
ENTRY FTFS 00280000
USING FTCMS,R12 00290000
USING FTCOMMON,R11 00300000
* 00310000
STM R14,R12,12(R13) SAVE THE CALLER'S THINGS. 00320000
LR R12,R15 GET OUR BASE ADDRESS. 00330000
ST R13,SAVEAREA+4 SAVE HIS SAVE AREA AND 00340000
LA R13,SAVEAREA GET OURS. 00350000
* 00360000
BAL R14,INIT1 PROCESS 1ST ARG (DOS FILESPEC) 00370000
BAL R14,INIT2 PROCESS 2ND ARG (CONTROL BYTE) 00380000
BAL R14,INIT3 PROCESS CMS FILEID & MISC DUTIES. 00390000
* 00400000
DONE L R13,4(,R13) RESTORE EVERYTHING 00410000
LM R14,R12,12(R13) FROM THE CALLER 00420000
SR R15,R15 AND RETURN WITH 00430000
BR R14 A NICE CODE. 00440000
* 00450000
**** PUT OUT ERROR MESSAGE & RETURN WITH A NON-ZERO RETURN CODE 00460000
* 00470000
ADONE L R3,RETCODE PASS ERROR CODES IN R2 & R3 00480000
LR R2,R15 00490000
L R15,=A(FTERR) 00500000
BALR R14,R15 UPDATED RC RETURNED IN R15 00510000
L R13,4(,R13) RESTORE EVERYTHING 00520000
L R14,12(R13) FROM THE CALLER 00530000
LM R0,R12,20(R13) EXCEPT R15! 00540000
BR R14 00550000
EJECT 00560000
*---------------------------------------------------------------------* 00570000
* ERROR HANDLER * 00580000
*---------------------------------------------------------------------* 00590000
PERR0 DS 0H END OF PLIST ENCOUNTERED 00600000
MVI RETCODE+3,40 00610000
B ADONE 00620000
PERR1 MVI RETCODE+3,41 D OR U 00630000
B ADONE 00640000
PERR2 MVI RETCODE+3,42 B OR T 00650000
B ADONE 00660000
PERR3 MVI RETCODE+3,43 R OR N 00670000
B ADONE 00680000
PERR4 MVI RETCODE+3,44 LRECL 00690000
B ADONE 00700000
PERR5 MVI RETCODE+3,45 Q DISK FAILURE 00710000
B ADONE 00720000
PERR6 MVI RETCODE+3,46 ALREADY EXISTS 00730000
B ADONE 00740000
PERR7 MVI RETCODE+3,47 LRECL > 64K 00750000
B ADONE 00760000
PERR8 MVI RETCODE+3,48 LOCAL FILESPEC 00770000
B ADONE 00780000
NOMEM MVI RETCODE+3,50 DMSFREE FAILURE 00790000
B ADONE 00800000
FSSERR MVI RETCODE+3,52 FSSTATE FAILURE 00810000
B ADONE 00820000
EJECT 00830000
*---------------------------------------------------------------------* 00840000
* PROCESS LOCAL FILESPEC WHICH IS PASSED AS FIRST AGRUMENT. * 00850000
* & MOVE IT INTO THE NEGOTIATION BUFFER. * 00860000
* CHECK FOR EXTENDED PLIST & LEADING DOUBLE QUOTE. * 00870000
*---------------------------------------------------------------------* 00880000
INIT1 DS 0H 00890000
ST R14,XINIR14 SAVE OUR RETURN POINTER. 00900000
CLC =X'FFFFFFFF',8(R1) CAN'T BE END OF PLIST YET! 00910000
BZ PERR0 00920000
LA R6,NEGO+7 WHERE WE WANT TO MOVE THE FILESPEC. 00930000
SR R7,R7 OFFSET INTO TARGET BUFFER 00940000
* 00950000
LR R3,R1 MAKE SURE EXTENDED PLIST IS USED 00960000
SRL R3,24 BY CHECKING HIGH ORDER BYTE. 00970000
LTR R3,R3 ZERO IS WIERD 00980000
BZ I21 00990000
C R3,=F'11' 1, 2, 5, 6, & 11 OK 01000000
BC 2,I21 01010000
LR R8,R0 POINTER TO UNFORMATED PARM AREA. 01020000
L R8,4(R8) POINTER TO START OF PLIST. 01030000
LA R9,80 MAXIMUM LENGTH 01040000
B I22 01050000
I21 LA R8,8(R1) USE FORMATTED PLIST FOR DOS FILESPEC 01060000
LA R9,8 MAXIMUM LENGTH 01070000
* 01080000
I22 IC R3,0(R7,R8) LOAD THE FIRST BYTE FROM PLIST. 01090000
CLM R3,1,=X'7F' SPECIAL CASE FOR DOUBLE QUOTE 01100000
BNE I33 01110000
BAL R14,INIT1A 01120000
B I34 01130000
* 01140000
I33 IC R3,0(R7,R8) LOAD THE NEXT BYTE FROM PLIST. 01150000
CLM R3,1,=X'40' IF IT'S A BLANK WE'RE DONE. 01160000
BZ I34 01170000
STC R3,0(R7,R6) NOW STORE THE CHARACTER IN FILESPEC. 01180000
LA R7,1(,R7) INCREMENT INDEX REGISTER AND 01190000
CR R7,R9 CHECK FOR LENGTH 01200000
BNZ I33 GET THE NEXT CHARACTER FROM PLIST. 01210000
* 01220000
I34 LTR R7,R7 MAKE SURE FILESPEC NOT ZERO LENGTH 01230000
BZ PERR8 01240000
C R7,=F'80' MAKE SURE FILESPEC FITS IN BUFFER. 01250000
BC 2,PERR8 01260000
SR R3,R3 STORE A NULL AT END OF FILESPEC. 01270000
STC R3,0(R7,R6) 01280000
LA R7,1(,R7) INC. DUE TO NULLS AT END OF STRING. 01290000
ST R7,FSPECLEN STORE LENGTH OF FILESPEC. 01300000
L R14,XINIR14 RESTORE AND 01310000
BR R14 RETURN. 01320000
XINIR14 DS F INIT R14 SAVE AREA. 01330000
EJECT 01340000
*---------------------------------------------------------------------* 01350000
* PROCESS LOCAL FILESPEC WHICH IS PASSED AS FIRST AGRUMENT * 01360000
* WHEN IT HAS BEEN PRECEEDED BY DOUBLE QUOTES. * 01370000
* IN THAT CASE MULTIPLE TOKENS ARE PERMITTED AND MORE THAN * 01380000
* ONE CONSECUTIVE BLANK MAY OCCUR IN THE FILESPEC. * 01390000
*---------------------------------------------------------------------* 01400000
INIT1A DS 0H 01410000
ST R14,XINAR14 SAVE OUR RETURN POINTER. 01420000
LA R8,1(,R8) SKIP THE DOUBLE QUOTE 01430000
LA R5,X'40' LOAD A BLANK CHARACTER TO START 01440000
* 01450000
I41 IC R3,0(R7,R8) LOAD THE NEXT BYTE FROM PLIST. 01460000
CLM R3,1,=X'7F' IF IT'S A DOUBLE QUOTE WE'RE DONE. 01470000
BE I43 01480000
CLM R3,1,=X'40' CHECK FOR BLANK 01490000
BNE I42 IF NOT CONTINUE 01500000
CLM R5,1,=X'40' IF SO CHECK PREVIOUS CHARACTER. 01510000
BE I42 IF IT'S ALSO BLANK THEN CONTINUE 01520000
LA R1,8(,R1) OTHERWISE INC. FORMATTED PLIST 01530000
* 01540000
I42 STC R3,0(R7,R6) NOW STORE THE CHARACTER IN FILESPEC. 01550000
LR R5,R3 SAVE PREVIOUS CHARACTER IN R5 01560000
LA R7,1(,R7) INCREMENT INDEX REGISTER AND 01570000
CR R7,R9 CHECK FOR LENGTH 01580000
BNZ I41 GET THE NEXT CHARACTER FROM PLIST. 01590000
* 01600000
I43 L R14,XINAR14 RESTORE AND 01610000
BR R14 RETURN. 01620000
XINAR14 DS F INIT R14 SAVE AREA. 01630000
EJECT 01640000
*---------------------------------------------------------------------* 01650000
* PROCESS CONTROL PARAMETER WHICH IS PASSED AS 2ND AGRUMENT. * 01660000
* FORMAT OF CONTROL PARM: (LEFT TO RIGHT) * 01670000
* BYTE 0: "D" (DOWNLOAD) OR "U" (UPLOAD) * 01680000
* BYTE 1: "T" (TEXT) OR "B" (BINARY) - CONVERSION SWITCH. * 01690000
* "D" (DEFAULT) LETS THE PC DETERMINE CONVERSION. * 01700000
* BYTE 2: "R" (REPLACE) OR "N" - REPLACE EXISTING FILE. * 01710000
* BYTES 3 THRU 7: VALID ONLY FOR UPLOAD; IF NON BLANK * 01720000
* INDICATE RECFM=F AND LRECL=NUMBER SPECIFIED LEFT JUSTIFIED. * 01730000
*---------------------------------------------------------------------* 01740000
INIT2 DS 0H 01750000
ST R14,XINIR14 SAVE OUR RETURN POINTER. 01760000
CLC =X'FFFFFFFF',16(R1) CAN'T BE END OF PLIST YET! 01770000
BZ PERR0 01780000
CLI 16(R1),C'D' 01790000
BE I51 GOOD GUESS SO CONTINUE. 01800000
CLI 16(R1),C'U' 01810000
BNE PERR1 MUST BE ONE OR THE OTHER. 01820000
I51 MVC UPDOWN(1),16(R1) SAVE INDICATION OF WHICH DIRECTION 01830000
* 01840000
LA R3,0 LOW BYTE WILL BE PASSED TO TN3270. 01850000
MVC BINTEXT,17(R1) SAVE WHETHER TO DO CONVERSION. 01860000
CLI 17(R1),C'B' BINARY OR TEXT FILE? 01870000
BZ I52 NO CHANGE TO LOW BYTE 01880000
CLI 17(R1),C'T' 01890000
BNE I54 GO TEST FOR DEFAULT. 01900000
O R3,=X'00000002' TURN ON BIT INDICATING CONVERSION. 01910000
B I52 CONTINUE... 01920000
I54 CLI 17(R1),C'D' FINAL TEST OF THIS BYTE. 01930000
BNE PERR2 FAILURE HERE IS AN ERROR. 01940000
O R3,=X'00000004' TURN ON BIT INDICATING DEFAULT. 01950000
* 01960000
I52 MVC REPLACE,18(R1) SAVE WHETHER TO REPLACE FILE. 01970000
CLI 18(R1),C'N' WILL NOT REPLACE FILE. 01980000
BZ I53 01990000
CLI 18(R1),C'R' 02000000
BNE PERR3 MUST BE ONE OR THE OTHER. 02010000
O R3,=X'00000001' TURN ON BIT INDICATING REPLACEMENT. 02020000
I53 STC R3,NEGO+6 BITS TO PASS TO TN3270. 02030000
* 02040000
CLI 16(R1),C'D' WE ARE NOT INTERESTED IN LRECL 02050000
BZ I59 ON DOWNLOADS. 02060000
BAL R14,GETLRECL 02070000
* 02080000
I59 L R14,XINIR14 RESTORE AND 02090000
BR R14 RETURN. 02100000
EJECT 02110000
*---------------------------------------------------------------------* 02120000
* PROCESS BYTES 3 THRU 7 OF CONTROL PARM TO DETERMINE LRECL * 02130000
* OF FIXED LENGTH FILE TO STORE ON CMS DISK. * 02140000
*---------------------------------------------------------------------* 02150000
GETLRECL DS 0H 02160000
MVI CRECFM+3,C'V' 02170000
SR R4,R4 CLEAR PRODUCT. 02180000
CLI 19(R1),C' ' IF IT'S BLANK THEN RECFM=V. 02190000
BZR R14 SO WE'RE DONE HERE 02200000
MVI CRECFM+3,C'F' OTHERWISE LENGTH GIVEN FOR RECFM=F. 02210000
LR R5,R1 WE ARE GOING TO ALTER THIS REGISTER. 02220000
LA R6,5 MAXIMUM NUMBER OF DIGITS TO PROCESS. 02230000
* 02240000
GL2 CLI 19(R5),C' ' SEE IF ANOTHER DIGIT TO PROCESS. 02250000
BZ GL1 GUESS WE ARE DONE! 02260000
TM 19(R5),X'F0' MAKE SURE CHARACTER IS A DIGIT. 02270000
BC 14,PERR4 02280000
MH R4,=H'10' SHIFT PRODUCT BY FACTOR OF 10. 02290000
IC R3,19(R5) NOW GET THE DIGIT FROM PARAMETER. 02300000
N R3,=X'0000000F' GET RID OF "ZONE". 02310000
AR R4,R3 ADD IT TO PRODUCT. 02320000
LA R5,1(,R5) NEXT DIGIT IN PARMS. 02330000
BCT R6,GL2 GET ANOTHER ONE IF NOT AT END OF ARG 02340000
* 02350000
GL1 C R4,CLRECL MAX LRECL = 64K 02360000
BC 10,PERR7 02370000
ST R4,CLRECL SAVE THE CHOSEN LRECL. 02380000
BR R14 RETURN. 02390000
*---------------------------------------------------------------------* 02400000
* MISCELLANEOUS PARAMETER PROCESSING & INITIALIZATION: * 02410000
* 1) GET CMS FILENAME FILETYPE FILEMODE. * 02420000
* 2) DO "Q DISK" TO GET BLOCKSIZE & CALC. FREE SPACE. * 02430000
* 3) DO AN FSSTATE AND VARIOUS EDITS. * 02440000
*---------------------------------------------------------------------* 02450000
INIT3 DS 0H 02460000
ST R14,XINIR14 SAVE OUR RETURN POINTER. 02470000
CLC =X'FFFFFFFF',24(R1) CAN'T BE END OF PLIST YET! 02480000
BZ PERR0 THE PURPOSE OF THIS CODE IS TO 02490000
CLC =X'FFFFFFFF',32(R1) GET CMS FILENAME ETC. 02500000
BZ PERR0 02510000
CLC =X'FFFFFFFF',40(R1) 02520000
BZ PERR0 02530000
MVC XFSCB+8(18),24(R1) MOVE ARGS FOR CMS FILE. 02540000
* 02550000
BAL R14,QDISK GET BLKSIZE & BLKS LEFT. 02560000
BAL R14,CMSINIT DO THE FSSTATE. 02570000
L R14,XINIR14 RESTORE AND 02580000
BR R14 RETURN. 02590000
EJECT 02600000
*---------------------------------------------------------------------* 02610000
* THIS ROUTINE VERIFIES CHOSEN MINIDISK & CALCS FREE SPACE ON IT. * 02620000
*---------------------------------------------------------------------* 02630000
QDISK DS 0H 02640000
ST R14,XQD14 SAVE RETURN ADDRESS. 02650000
LA R5,40(,R1) DISK MODE LETTER PASSED HERE 02660000
USING NUCON,0 02670000
LA R10,IADT+ADTPTR-ADTSECT POINT TO POINTER TO FIRST. 02680000
DROP 0 02690000
USING ADTSECT,R10 02700000
* 02710000
ADTLOOP DS 0H THIS CODE THANKS TO K. FRIEDMAN 02720000
L R10,ADTPTR FIND FIRST/NEXT ADT 02730000
LTR R10,R10 IF NONE, 02740000
BZ PERR5 THEN DISK IS NOT ACCESSED. 02750000
CLC ADTM,0(R5) IS THIS THE DISK MODE REQUESTED? 02760000
BE ADT10 YES -> OUR SEARCH IS OVER. 02770000
B ADTLOOP NO -> LOOK SOME MORE 02780000
ADT10 DS 0H 02790000
L R6,ADTDBSIZ GET DISK BLOCK SIZE 02800000
LTR R6,R6 IF ZERO, 02810000
BZ PERR5 WE CAN'T DEAL WITH IT. 02820000
L R15,ADTDTA LOOK IN DEVICE TABLE. 02830000
CLC 0(2,R15),=H'0' IF NO VIRTUAL DEVICE, 02840000
BZ PERR5 WE CAN'T DEAL WITH IT. 02850000
ST R6,XBLKSIZE 02860000
* 02870000
L R5,ADTNUM GET NUMBER OF BLOCKS ON DISK 02880000
S R5,ADTUSED SUBTRACT NUMBER IN USE 02890000
SR R4,R4 CLEAR HIGH MULTIPLICAND. 02900000
MR R4,R6 02910000
ST R5,BYTELEFT NUMBER OF BYTES AVAILABLE 02920000
* 02930000
DROP R10 02940000
L R14,XQD14 RESTORE AND 02950000
BR R14 RETURN. 02960000
XQD14 DS F 02970000
EJECT 02980000
*---------------------------------------------------------------------* 02990000
* THIS CODE DEALS WITH THE CMS FILE IN QUESTION. * 03000000
*---------------------------------------------------------------------* 03010000
CMSINIT DS 0H 03020000
ST R14,XCMS14 03030000
FSSTATE FSCB=XFSCB,ERROR=CMS1,FORM=E 03040000
CLI UPDOWN,C'D' IS THIS A DOWNLOAD? 03050000
BZ CMS2 PROCEED TO CALCULATE FILESIZE. 03060000
CLI REPLACE,C'N' FILE ALREADY EXISTS FOR UPLOAD... 03070000
BZ PERR6 SO WE CAN'T CLOBBER IT. 03080000
FSERASE FSCB=XFSCB OTHERWISE ERASE IT 03090000
B CMS9 AND CONTINUE. 03100000
* 03110000
CMS1 CLI UPDOWN,C'D' IS THIS A DOWNLOAD? 03120000
BZ FSSERR SOMETHING IS AMISS.. 03130000
C R15,=F'28' FILE NOT FOUND OK ON UPLOAD. 03140000
BZ CMS9 03150000
B FSSERR OTHER ERROR NOT OK. 03160000
* 03170000
CMS2 L R6,32(R1) GET THE LRECL. 03180000
L R5,48(R1) GET NUMBER OF RECORDS 03190000
ST R5,XNOREC WE NEED HIM LATER. 03200000
SR R4,R4 CLEAR MULTIPLICAND. 03210000
MR R4,R6 MAX FILESIZE IN BYTES IS.. 03220000
ST R5,NUMBYTES LRECL TIMES NUMBER OF RECORDS. 03230000
L R6,XBLKSIZE NOW TRY THE OTHER WAY... 03240000
L R5,44(R1) LOAD NUMBER OF BLOCKS. 03250000
MR R4,R6 03260000
CL R5,NUMBYTES SEE WHICH NUMBER IS LOWER.. 03270000
BC 2,CMS9 IT GETS PASSED TO THE PC. 03280000
ST R5,NUMBYTES 03290000
* 03300000
CMS9 L R14,XCMS14 RESTORE AND 03310000
BR R14 RETURN. 03320000
XCMS14 DS F 03330000
EJECT 03340000
*---------------------------------------------------------------------* 03350000
* THIS ROUTINE CALLED VIA BALR R14,R15 MAKES THE FS CALLS FOR FT3270. * 03360000
* ON ENTRY: R2 IS MACRO TO INVOKE (1 = READ, 2 = WRITE, 3 = CLOSE) * 03370000
* R3 CONTAINS RECFM FOR FSWRITE (F OR V) * 03380000
* R6 CONTAINS NUMBER OF BYTES FOR FSWRITE * 03390000
* R10 CONTAINS THE BUFFER ADDRESS FOR THE READ/WRITE * 03400000
* ON EXIT: R15 CONTAINS THE RETURN CODE FROM THE SVC 202 * 03410000
* R0 NUMBER OF BYTES READ IN THE CASE OF FSREAD * 03420000
* REGISTERS 4 THROUGH 14 ARE PRESERVED THROUGH THIS ROUTINE. * 03430000
*---------------------------------------------------------------------* 03440000
FTFS DS 0H 03450000
USING FTFS,R15 03460000
STM R4,R14,SAVEAREA SAVE SOME OF THE CALLER'S THINGS. 03470000
DROP R15 03480000
USING FTFS,R12 03490000
LR R12,R15 USE THE NORMAL BASE REGISTER 03500000
* 03510000
BCT R2,FTFS1 IF R2 > 1 THEN SKIP FSREAD 03520000
FSREAD FSCB=XFSCB,BUFFER=(R10),BSIZE=65536,FORM=E 03530000
B FTFS9 SKIP OTHER CALLS 03540000
* 03550000
FTFS1 BCT R2,FTFS2 IF NEW R2 > 1 THEN SKIP FSWRITE 03560000
FSWRITE FSCB=XFSCB,BUFFER=(R10),BSIZE=(R6),RECFM=(R3),FORM=E 03570000
B FTFS9 SKIP FSCLOSE 03580000
* 03590000
FTFS2 FSCLOSE FSCB=XFSCB 03600000
FTFS9 LM R4,R14,SAVEAREA GET OUR REGISTERS BACK 03610000
BR R14 RETURNING INFO IN R15 & R0 03620000
EJECT 03630000
*---------------------------------------------------------------------* 03640000
* SAVE AREA, VARIABLES, & FSCB * 03650000
*---------------------------------------------------------------------* 03660000
SAVEAREA DS 18F 03670000
XBLKSIZE DS 1F BLOCKSIZE ON CMS MINIDISK IN QUESTION 03680000
RETCODE DC F'0' SAVE THE RETURN CODE. 03690000
REPLACE DS CL(1) INDICATES WHETHER TO REPLACE FILE. 03700000
XFSCB FSCB ' ',FORM=E 03710000
* 03720000
LTORG 03730000
EJECT 03740000
*---------------------------------------------------------------------* 03750000
* THESE VARIABLES ARE USED BY THE CALLER AS WELL * 03760000
*---------------------------------------------------------------------* 03770000
FTCOMMON DSECT 03780000
* 03790000
BYTELEFT DS 1F AVAILABLE SPACE ON SAME 03800000
NUMBYTES DS 1F SIZE OF FILE TO BE DOWNLOADED 03810000
XNOREC DS 1F NUMBER OF RECORDS TO DOWNLOAD 03820000
CLRECL DS 1F LENGTH FOR FIXED LENGTH UPLOAD 03830000
FSPECLEN DS 1F LENGTH OF NAME OF DOS FILESPEC 03840000
CRECFM DS 1F RECFM FOR UPLOAD 03850000
BINTEXT DS CL(1) INDICATES WHETHER TO PERFORM CONVERSION 03860000
UPDOWN DS CL(1) WHETHER UPLOAD OR DOWNLOAD 03870000
DS 0F 03880000
NEGO DS CL(87) THE NEGOTIATION BUFFER 03890000
PRINT NOGEN 03900000
ADT 03910000
NUCON 03920000
REGEQU 03930000
END 03940000